﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SingletonPattern
{
    internal class Singleton
    {
        private static Singleton firstInstance = null;

        private static String[] scrabbleLetters =
            {
                "a", "a", "a", "a", "a", "a", "a", "a", "a",
                "b", "b", "c", "c", "d", "d", "d", "d", "e", "e", "e", "e", "e",
                "e", "e", "e", "e", "e", "e", "e", "f", "f", "g", "g", "g", "h",
                "h", "i", "i", "i", "i", "i", "i", "i", "i", "i", "j", "k", "l",
                "l", "l", "l", "m", "m", "n", "n", "n", "n", "n", "n", "o", "o",
                "o", "o", "o", "o", "o", "o", "p", "p", "q", "r", "r", "r", "r",
                "r", "r", "s", "s", "s", "s", "t", "t", "t", "t", "t", "t", "u",
                "u", "u", "u", "v", "v", "w", "w", "x", "y", "y", "z",
            };

        private static void randomLetters()
        {
            Singleton singleton = Singleton.getInstance();
            List<String> letterList = singleton.getLetterList();
            Random rnd = new Random();
            for (int i = 1; i < letterList.Count; i++)
            {
                int pos = rnd.Next(i + 1);
                var x = letterList[i];
                letterList[i] = letterList[pos];
                letterList[pos] = x;
            }
        }

        private List<String> letterList = new List<String>(scrabbleLetters.ToList());

        private Singleton()
        {
        }

        public static Singleton getInstance()
        {
            if (firstInstance == null)
            {
                firstInstance = new Singleton();
                randomLetters();
            }

            return firstInstance;
        }

        public List<String> getLetterList()
        {
            return firstInstance.letterList;
        }

        public List<String> getTiles(int howManyTiles)
        {
            List<String> tilesToSend = new List<String>();
            for (int i = 0; i <= howManyTiles; i++)
            {
                tilesToSend.Add(letterList[0]);
                letterList.RemoveAt(0);
            }
            return tilesToSend;

        }
    }
}